From 4ce65049c8a03275ae62e19d066943531017710e Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Wed, 17 Aug 2005 18:14:46 +0000 Subject: [PATCH] Fix vmalloc_fault() path for x86/64 XenLinux. There may be a deeper underlying problem w.r.t pagetable initialisation at start of day, but this simple fix is a good workaround until we have time to investigate properly. Signed-off-by: Keir Fraser --- linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c index 874b3afede..c0c5dc86b5 100644 --- a/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/mm/fault.c @@ -250,7 +250,11 @@ static int vmalloc_fault(unsigned long address) happen within a race in page table update. In the later case just flush. */ - pgd = pgd_offset(current->mm ?: &init_mm, address); + /* On Xen the line below does not always work. Needs investigating! */ + /*pgd = pgd_offset(current->mm ?: &init_mm, address);*/ + pgd = (pgd_t *)per_cpu(cur_pgd, smp_processor_id()); + pgd += pgd_index(address); + pgd_ref = pgd_offset_k(address); if (pgd_none(*pgd_ref)) return -1; -- 2.30.2